package main

import "fmt"

func main() {
	nums := [...]int32{1, 2, 3}
	// slice := nums[1:4]//下标越界
	// fmt.Println(slice)

	//从0开始可以省略0
	slice2 := nums[:1]
	fmt.Println(slice2) //[1]

	//到末尾可以省略后一部分
	slice3 := nums[1:]
	fmt.Println(slice3) //[2 3]

	//从头到末尾就可以省略全部
	slice4 := nums[:]
	fmt.Println(slice4)

	//切片可以继续切片
	slice5 := slice3[1:] //[2 3]切片出 [3]
	fmt.Println(slice5)  //[3]
	//空间也是同一个
	slice5[0] = 1000
	fmt.Println(slice5) //1000
	fmt.Println(slice3) //[2 1000]
	fmt.Println(nums)   //[1 2 1000]

	//通过append函数来扩容切片
	//注意append之后其实切片内部是一个新的数组
	slice6 := append(slice5, 200, 300)
	fmt.Println(slice6) //1000 200 300
	fmt.Println(slice5) //1000
	slice6[0] = 2000
	fmt.Println(slice6) //2000 200 300
	//slice5不变
	fmt.Println(slice5) //1000  注意此时slice6和slice5根本内部不是一个数组，因此6和5已经无关
	//nums不变
	fmt.Println(nums) //1 2 1000

	//append也可以追加切片
	//注意语法： append(切片,要追加的切片...)
	slice6 = append(slice6, slice6...)
	fmt.Println(slice6) //2000 200 300 2000 200 300

}
